Computer software can be classified based on characteristics such as functionality and field of use. In some classifications, “application software” includes computer programs which interact directly with people to perform tasks at their direction. Application software may be general-purpose software intended for various fields of use. For instance, word processors and web browsers are used in many professions and industries. Application software may also have a specific field of use, such as legal docketing, accounting, package tracking, and so on.
Unlike application software, “system software” interacts primarily with other software to perform tasks that support application software. For instance, device drivers, kernels, network protocols, process schedulers, memory managers, and many other kinds of system software are used in computer systems and networks. Computer programming “tools” such as compilers, debuggers, profilers, and others are used to edit, generate, translate, combine, debug, profile, test, and/or otherwise assist in software development.
However, such classifications generally have limitations, in part because some software fits in more than one of these classifications. For example, a source code editor may be viewed both as an application and as a development tool. Moreover, many different classifications of software are possible, classifications are often vague, and the choice between classifications is often subjective and fluid. As a result, suitable classifications have not been as well-identified, nor as closely and deeply integrated into software development, as they could be.